package model

// EdgeType 边类型定义表
type EdgeType struct {
	BaseModel           // 继承公共字段
	TypeName     string `gorm:"column:TYPE_NAME;unique;not null;size:50;comment:边类型标识（英文，如bind/relate）" json:"type_name"`
	DisplayName  string `gorm:"column:DISPLAY_NAME;not null;size:100;comment:边类型显示名（如绑定/关联）" json:"display_name"`
	SourceNodeID int    `gorm:"column:SOURCE_NODE_ID;not null;index;comment:源节点类型ID（外键）" json:"source_node_id"`
	TargetNodeID int    `gorm:"column:TARGET_NODE_ID;not null;index;comment:目标节点类型ID（外键）" json:"target_node_id"`
	Description  string `gorm:"column:DESCRIPTION;size:500;comment:边类型描述" json:"description,omitempty"`

	// 外键关联（序列化时忽略）
	SourceNodeType NodeType `gorm:"foreignKey:SourceNodeID;references:ID" json:"-"`
	TargetNodeType NodeType `gorm:"foreignKey:TargetNodeID;references:ID" json:"-"`
}

func (EdgeType) TableName() string {
	return "EDGE_TYPES"
}

// EdgeAttribute 边属性定义表
type EdgeAttribute struct {
	BaseModel             // 继承基础字段
	EdgeTypeID   int      `gorm:"column:EDGE_TYPE_ID;not null;index;comment:关联边类型ID" json:"edge_type_id"`
	AttrName     string   `gorm:"column:ATTR_NAME;not null;size:50;comment:属性标识（英文）" json:"attr_name"`
	DisplayName  string   `gorm:"column:DISPLAY_NAME;not null;size:100;comment:属性显示名" json:"display_name"`
	DataType     string   `gorm:"column:DATA_TYPE;not null;size:20;comment:数据类型（string/date等）" json:"data_type"`
	CalcRule     CalcRule `gorm:"column:CALC_RULE;type:TEXT;comment:计算规则（JSON格式）" json:"calc_rule,omitempty"`
	IsRequired   bool     `gorm:"column:IS_REQUIRED;type:INT;default:0;comment:是否必填属性（0=否，1=是）" json:"is_required"`
	DefaultValue string   `gorm:"column:DEFAULT_VALUE;size:200;comment:默认值" json:"default_value,omitempty"`
	SortOrder    int      `gorm:"column:SORT_ORDER;default:0;comment:显示排序" json:"sort_order"`
}

func (EdgeAttribute) TableName() string {
	return "EDGE_ATTRIBUTES"
}
